home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
tos_updt
/
fmcity
/
palcom
/
auto
/
script
/
mailcom.mx
< prev
next >
Wrap
Text File
|
1995-04-11
|
8KB
|
265 lines
//--------------------------------------------------------------------------//
// PALCOM V2.1 L10 //
// 自動通信:メール送受信スクリプト //
// //
// CopyRight(C) 1994/10/20 //
// FUJITSU PERSONAL COMPUTER SYSTEMS LIMITED //
// written by C-cube Soft T.Nakamura //
//--------------------------------------------------------------------------//
// 本スクリプトは、$$USER.DEFINED.9 を復帰値格納用に使用します。 //
// 【出力】 //
// $$USER.DEFINED.9 = #TRUE : 正常に終了した //
// #FALSE : 正常に終了出来なかった //
//--------------------------------------------------------------------------//
event @OPEN.EXTERN {
$$USER.DEFINED.9 = #FALSE;
$readFlgSub = #FALSE;
$AUTO.WAIT15 = AUTO.getWaitChar( 15 );
$AUTO.WAIT60 = AUTO.getWaitChar( 60 );
AUTO.putStr2("MCHECK\r");
sys.stopIntRec();
comtable( $a, 300 ) {
">\w\w" { exit; }
">\w\w" { exit; }
"(未読分" { $readFlgSub = #TRUE; }
interval { AUTO.haltCheck(); }
timeout { $readFlgSub = #TRUE; }
}
sys.startIntRec();
$mailList = list.getNth( AUTO.getAutoData(), 2 );
//--- 送信文書無し&ダウンロード指定無しの場合 RETURN ---//
$idxList = AUTO.getUpList( 1 );
if(( list.size( $idxList ) == 0 )&&
(( list.getNth( $mailList, 1 ) == #FALSE )||( $readFlgSub == #FALSE ))){
$$USER.DEFINED.9 = #TRUE;
return;
}
//--- メールに入る ---//
sys.stopIntRec();
loop {
AUTO.putStr("MAIL\r");
$errFlg = 1;
comtable( $a, 300 ) {
"MAIL\n" { $errFlg = 0; exit; }
interval { AUTO.haltCheck(); }
}
if( $errFlg == 0 ) {
exit;
}
AUTO.putStr("\r");
AUTO.waitPrompt( #TRUE );
continue;
}
$moreFlg = 0;
$inFlg = 0;
comtable( $a, 1200 ) {
"電子メール" { $inFlg = 1; }
"MAIL>\w\w" { $inFlg = 1; exit; }
">\w\w" { exit; }
$AUTO.WAIT60 { AUTO.putStr("\r"); }
interval { AUTO.haltCheck(); }
timeout { exit; }
}
sys.startIntRec();
if( $inFlg == 0 ) {
$errMsg = ["電子メールサービスへ入ることが出来ませんでした。",
"巡回を中止しました。"];
AUTO.error("電子メール巡回", $errMsg );
$$USER.DEFINED.9 = #FALSE;
return;
}
AUTO.sendCommand("SET MENU OFF");
AUTO.sendCommand("SET PAGE OFF");
//------------------------//
//--- アップロード ---//
//------------------------//
if( list.getNth( $mailList, 2 ) == #TRUE ) {
xfer.pauseText( AUTO.getLogFileId());
foreach( $a, $idxList ) {
//--- テキストメールの送信 ---//
$$USER.DEFINED.9 = [$a, 0];
$path = str.join([$$DIR.STANDARD,
"AUTO\\SCRIPT\\SENDFILE.MX"], "" );
script.openExtern( $path, #FALSE, [] );
if( AUTO.getHaltFlg() != 0 ) {
xfer.resumeText( AUTO.getLogFileId());
return;
}
if( $$USER.DEFINED.9 == #TRUE ) {
AUTO.setSendFlg( $a );
}
}
xfer.resumeText( AUTO.getLogFileId());
}
//------------------------//
//--- ダウンロード ---//
//------------------------//
$logId = AUTO.getLogFileId();
if(( list.getNth( $mailList, 1 ) == #TRUE )&&( $readFlgSub == #TRUE )) {
sys.stopIntRec();
AUTO.putStr2("READ\r");
//--- 受信数を調べる ---//
$txtList = [];
$binList = [];
$txtTitleList = [];
$binTitleList = [];
comtable( $a, 900 ) {
interval { AUTO.haltCheck(); }
$AUTO.WAIT60 { AUTO.putStr("\r"); }
">\w\w" { exit; } // プロンプト
">\w\w" { exit; }
" %b%d %b%16a%2d/%2d " { // TEXT の未受信メール
list.putLast( $txtList,str.replaceAll( str.left($a,3)," ",""));
$str = str.replaceAll( com.getString(0,#TRUE,#TRUE),"\n","" );
$strList = list.delLast( str.split( $str, " " ));
$str = str.join( $strList, " " );
list.putLast( $txtTitleList, $str );
}
" %b%d %b%16a%2d/%2d B " { // BINARY の未受信メール
list.putLast( $binList,str.replaceAll( str.left($a,3)," ",""));
$str = str.replaceAll( com.getString(0,#TRUE,#TRUE),"\n","" );
$strList = list.delLast( str.split( $str, " " ));
$str = str.join( $strList, " " );
list.putLast( $binTitleList, $str );
}
timeout {
$errMsg = ["通信異常(タイムアウト)",
"受信を中断しました。"];
AUTO.error( "メール送/受信", $errMsg );
$$USER.DEFINED.9 = #FALSE;
return;
}
}
//--- テキストのメールを受信する ---//
$num = list.size( $txtList );
$i = 1;
if( $num != 0 ) {
$str = str.join( $txtList, "," );
AUTO.putStr2( str.join([$str, "\r"], "" ));
$ptr = file.tell( $logId );
$ptr2 = $ptr;
$mode = 0;
comtable( $a, 0 ) {
interval { AUTO.haltCheck(); }
$AUTO.WAIT60 { AUTO.putStr("\r"); }
"\n" { // 行のカウント用
if( $mode == 0 ) {
$ptr = file.tell( $logId );
$ptr2 = $ptr;
} else {
$ptr2 = file.tell( $logId );
}
}
"%b%d %b%18a%3c%5d %2d/%2d/%2d %b%d:%2d" {
if( file.tell( $logId ) == $ptr2 + 54 ) {
if( $mode == 0 ) { // 見出しにマッチ
$mode = 1;
$id = str.mid( $a, 22, 8 );
}
}
}
"action:\w\w" { // 作業プロンプト
$mode = 0;
AUTO.putStr2("SAVE\r");
$title = list.getNth( $txtTitleList, $i );
AUTO.writeIdx([
[0x501,[1,[1,1,-1,-1,-1,-1,-1,-1,-1,-1]]],
[0x104,[list.getNth( $txtTitleList, $i )]],
[0x111,[$id]],
[0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
if( $num == $i ) {
exit;
}
$i = $i + 1;
}
}
AUTO.waitPrompt( #TRUE );
sys.startIntRec();
}
//--- バイナリメールの受信 ---//
if(( list.size( $binList ) > 0 )&&( list.size( $txtList ) == 0 )) {
AUTO.sendCommand("M");
}
$i = 1;
$fName = AUTO.getLogFileName();
//$binList = [];
foreach( $a, $binList ) {
$cmd = str.join(["DOWN", $a, "PROT:BPL\r"], " " );
AUTO.putStr2( $cmd );
comtable( $b, 0 ) {
interval { AUTO.haltCheck(); }
":\w\w" {
AUTO.putStr2( str.join([$fName, "\r"], "" ));
}
"開始-\n" {
exit;
}
}
$IdxId = AUTO.getIdxFileId();
$idxHeader = lsi.getInfo( $IdxId );
list.del1st( $idxHeader );
list.put1st( $idxHeader, AUTO.getIdxNum());
lsi.setInfo( $IdxId, $idxHeader );
$ptr = file.tell( $logId );
xfer.endText( $logId );
file.close( $logId );
event.mask( @ERROR );
$ret = xfer.recBinary( $fName, "", #TRUE, [] );
event.unmask( @ERROR );
$logId = file.open( $fName, "", 1 );
file.seek( $logId, 0, 2 );
xfer.recText( $logId, [] );
AUTO.setLogFileId( $logId );
if( data.getType( $ret ) != #NUMBER ) {
$errMsg = ["通信異常",
"受信を中断しました。"];
AUTO.error( "メール送/受信", $errMsg );
$$USER.DEFINED.9 = #FALSE;
return;
} else {
AUTO.writeIdx([
[0x501,[1,[1,1,-1,-1,-1,-1,-1,-1,-1,-1]]],
[0x104,[list.getNth( $binTitleList, $i )]],
[0x303,[0x01,0x8000,$ptr,$ret,0,0,0]]] );
}
comtable( $b, 0 ) {
interval { AUTO.haltCheck(); }
$AUTO.WAIT60 { AUTO.putStr("\r"); }
"action:\w\w" { // 作業プロンプト
$mode = 0;
AUTO.sendCommand("SAVE");
exit;
}
"削除 (1:削除する 2:しない)\n:\w\w" {
$mode = 0;
AUTO.sendCommand("2");
exit;
}
}
$i = $i + 1;
}
}
sys.startIntRec();
$$USER.DEFINED.9 = #TRUE;
return;
}
event @CLOSE.EXTERN {
sys.startIntRec();
return;
}
event @ERROR {
sys.startIntRec();
AUTO.fatalError();
event.mainLoop();
}